Video Graphics Array

This article refers to the now obsolete 1990s computer display hardware, not the 640×480 display resolution, the 15-pin VGA connector, or the corresponding VGA cable ; for other uses see VGA (disambiguation).

Video Graphics Array (VGA) refers specifically to the display hardware first introduced with the IBM PS/2 line of computers in 1987,[1] but through its widespread adoption has also come to mean either an analog computer display standard, the 15-pin D-subminiature VGA connector or the 640×480 resolution itself. While this resolution was superseded in the personal computer market in the 1990s, it is becoming a popular resolution on mobile devices.[2]

VGA was the last graphical standard introduced by IBM that the majority of PC clone manufacturers conformed to, making it today (as of 2010) the lowest common denominator that all PC graphics hardware supports, before a device-specific driver is loaded into the computer. For example, the MS-Windows splash screen appears while the machine is still operating in VGA mode, which is the reason that this screen always appears in reduced resolution and color depth.

VGA was officially superseded by IBM's XGA standard, but in reality it was superseded by numerous slightly different extensions to VGA made by clone manufacturers that came to be known collectively as "Super VGA".

Contents

Technical details

Hardware

VGA compared to other standard resolutions.

VGA is referred to as an "array" instead of an "adapter" because it was implemented from the start as a single chip (an ASIC), replacing the Motorola 6845 and dozens of discrete logic chips that covered the full-length ISA boards of the MDA, CGA, and EGA. Its single-chip implementation also allowed the VGA to be placed directly on a PC's motherboard with a minimum of difficulty (it only required video memory, timing crystals and an external RAMDAC), and the first IBM PS/2 models were equipped with VGA on the motherboard. (Contrast this with all of the "family one" IBM PC desktop models—the PC [machine-type 5150], PC/XT [5160], and PC AT [5170]—which required a display adapter installed in a slot in order to connect a monitor.)

The VGA specifications are as follows:

The VGA supports both All Points Addressable graphics modes, and alphanumeric text modes. Standard graphics modes are:

As well as the standard modes, VGA can be configured to emulate many of the modes of its predecessors (EGA, CGA, and MDA). Compatibility is almost full at BIOS level, but even at register level, a very high value of compatibility is reached. VGA is not compatible with the special IBM PCjr or HGC video modes.

Signal

The intended value for the horizontal frequency of VGA is exactly double the value used in the NTSC-M video system. The formula for the VGA horizontal frequency is thus (60 ÷ 1001) × 525 kHz = 4500 ÷ 143 kHz ≈ 31.4686 kHz. All other frequencies used by the VGA card are derived from this value by integer multiplication or division. Since the exactness of quartz oscillators is limited, real cards will have slightly higher or lower frequency. For most common VGA mode 640×480 "60 Hz" non-interlaced the horizontal timings are:[7][8]

Parameter Value Unit
Pixel clock frequency 25.175 MHz[9]
Horizontal pixels 640
Horizontal sync polarity Negative
Total time for each line 31.77 µs
Front porch (A) 0.94 µs
Sync pulse length (B) 3.77 µs
Back porch (C) 1.89 µs
Active video (D) 25.17 µs

(Total horizontal sync time 6.60 µs)

VGA horizontal timings for 640×480

The vertical timings are:

Parameter Value Unit
Vertical lines 480
Vertical sync polarity Negative
Vertical frequency 59.94 Hz
Front porch (E) 0.35 ms
Sync pulse length (F) 0.06 ms
Back porch (G) 1.02 ms
Active video (H) 15.25 ms

(Total vertical sync time 1.43 ms)

640 × 400 @ 70 Hz is video mode used for booting most x86 personal computers.[7]

640 × 480 @ 60 Hz is the default MS-Windows graphics mode with 16 colors.[7]

The actual timings vary slightly. For example for 640×480 @ 60fps a 25,17 µs active video time with a pixel frequency of 25,174 MHz gives 633 pixels rather than the expected 640 pixels.

Standard text modes

The BIOS offers some text modes for a VGA adapter, which have 80×25, 40×25, 80×43 or 80×50 text grid. Each cell may choose from one of 16 available colors for its foreground and 8 colors for the background; the 8 background colors allowed are the ones without the high-intensity bit set. Each character may also be made to blink; all that are set to blink will blink in unison. The blinking option for the entire screen can be exchanged for the ability to use all 16 colors for background. All of these options are the same as those on the CGA adapter as introduced by IBM.

Like EGA, VGA supports 512 simultaneous characters on screen by disabling one color bit. The glyphs on 80×25 mode are normally made of 9×16 pixels. Users may define their own character set by loading a custom font onto the card. As character data is 8-bit wide, some characters are normally made 9 bit wide by repeating the last vertical line, especially those defining horizontal IBM box drawing characters.[10][11]

Monochrome modes

VGA adapters usually support both monochrome and color modes, though the monochrome mode is almost never used. Black and white text on nearly all modern VGA adapters is drawn by using gray colored text on a black background in color mode. VGA monochrome monitors intended primarily for text were sold, but most of them will work at least adequately with a VGA adapter in color mode. Occasionally a faulty connection between a modern monitor and video card will cause the VGA part of the card to detect the monitor as monochrome; this will cause the BIOS and initial boot sequence to appear in greyscale. Usually once the video card's drivers are loaded (for example by continuing to boot into the operating system) they will override this detection and the monitor will return to color.

Addressing details

Examples of VGA images in 640×480×16 (top) and 320×200×256 modes (bottom). Dithering is used to mask color limitations.

The video memory of the VGA is mapped to the PC's memory via a window in the range between segments 0xA0000 and 0xBFFFF in the PC's real mode address space (A000:0000 and B000:FFFF in segment:offset notation). Typically these starting segments are:

Due to the use of different address mappings for different modes, it is possible to have a Monochrome Display Adapter and a color adapter such as the VGA, EGA, or CGA installed in the same machine. At the beginning of the 1980s, this was typically used to display Lotus 1-2-3 spreadsheets in high-resolution text on a MDA display and associated graphics on a low-resolution CGA display simultaneously. Many programmers also used such a setup with the monochrome card displaying debugging information while a program ran in graphics mode on the other card. Several debuggers, like Borland's Turbo Debugger, D86 (by Alan J. Cox) and Microsoft's CodeView could work in a dual monitor setup. Either Turbo Debugger or CodeView could be used to debug Windows. There were also DOS device drivers such as ox.sys, which implemented a serial interface simulation on the MDA display and, for example, allowed the user to receive crash messages from debugging versions of Windows without using an actual serial terminal. It is also possible to use the "MODE MONO" command at the DOS prompt to redirect the output to the monochrome display. When a Monochrome Display Adapter was not present it was possible to use the 0xB000 – 0xB7FF address space as additional memory for other programs (for example by adding the line "DEVICE=EMM386.EXE I=B000-B7FF" into config.sys, this memory would be made available to programs that can be "loaded high" – loaded into high memory.)

The VGA color palette

VGA 256 default color palette

The VGA color system is backwards compatible with the EGA and CGA adapters, and adds another level of configuration on top of that. CGA was able to display up to 16 colors, and EGA extended this by allowing each of the 16 colors to be chosen from a 64-color palette (these 64 colors are made up of two bits each for red, green and blue: two bits × three channels = six bits = 64 different values). VGA further extends this scheme by increasing the EGA palette from 64 entries to 256 entries. Two more blocks of 64 colors with progressively darker shades were added, along with 8 "blank" entries that were set to black.[12]

In addition to the extended palette, each of the 256 entries could be assigned an arbitrary color value through the VGA DAC. The EGA BIOS only allowed 2 bits per channel to represent each entry, while VGA allowed 6 bits to represent the intensity of each of the three primaries (red, blue and green). This provided a total of 64 different intensity levels for red, green and blue, resulting in 262,144 possible colors, any 256 of which could be assigned to the palette (and in turn out of those 256, any 16 of them could be displayed in CGA video modes).

This method allowed new VGA colors to be used in EGA and CGA graphics modes, providing one remembered how the different palette systems are laid together. To set the text color to very dark red in text mode, for instance, it will need to be set to one of the CGA colors (for example, the default color, #7: light grey.) This color then maps to one in the EGA palette—in the case of CGA color 7, it maps to EGA palette entry 42. The VGA DAC must then be configured to change color 42 to dark red, and then immediately anything displayed on the screen in light-grey (CGA color 7) will become dark red. This feature was often used in 256-color VGA DOS games when they first loaded, by smoothly fading out the text screen to black. (The game Descent, from 1995, is an example.)

While CGA and EGA-compatible modes only allowed 16 colors to be displayed at any one time, other VGA modes, such as the widely used mode 13h, allowed all 256 palette entries to be displayed on the screen at the same time, and so in these modes any 256 colors could be shown out of the 262,144 colors available.

Programming tricks

An undocumented but popular technique nicknamed Mode X (first coined by Michael Abrash) or "tweaked VGA" was used to make programming techniques and graphics resolutions available that were not otherwise possible in the standard Mode 13h. This was done by "unchaining" the 256 KB VGA memory into four separate "planes", which would make all of VGA's 256 KB of RAM available in 256-color modes. There was a trade-off for extra complexity and performance loss in some types of graphics operations, but this was mitigated by other operations becoming faster in certain situations:

Sometimes the monitor refresh rate had to be reduced to accommodate these modes, increasing eye strain. They were also incompatible with some older monitors, producing display problems such as picture detail disappearing into overscan, flickering, vertical roll, and lack of horizontal sync depending on the mode being attempted. Because of this, most VGA tweaks used in commercial products were limited to "monitor-safe" combinations, such as 320×240 (square pixels, three video pages), 320×400 (double resolution, two video pages), and 360×480 (highest resolution compatible with standard VGA monitors, one video page). Currently, the highest known tweaked VGA resolution is 400×600×256 (400×600 pixel × 256 colors). It is used in Fractint – a famous fractal generator.

See also

References

Further reading

External links